winbrew_engines\windows\exe/
validation.rs

1use anyhow::{Result, bail};
2use std::path::Path;
3
4pub(super) fn validate_install_inputs(
5    download_path: &Path,
6    install_dir: &Path,
7    package_name: &str,
8) -> Result<()> {
9    validate_download_path(download_path)?;
10    validate_install_dir(install_dir)?;
11    validate_package_name(package_name)?;
12
13    Ok(())
14}
15
16pub(super) fn validate_download_path(path: &Path) -> Result<()> {
17    if path.as_os_str().is_empty() {
18        bail!("installer path cannot be empty");
19    }
20
21    if !path.exists() {
22        bail!("installer path does not exist: {}", path.display());
23    }
24
25    if !path.is_file() {
26        bail!("installer path is not a file: {}", path.display());
27    }
28
29    Ok(())
30}
31
32pub(super) fn validate_install_dir(path: &Path) -> Result<()> {
33    let path_text = path.to_string_lossy();
34
35    if path.as_os_str().is_empty() || path_text.trim().is_empty() {
36        bail!("install directory cannot be empty");
37    }
38
39    Ok(())
40}
41
42pub(super) fn validate_package_name(package_name: &str) -> Result<()> {
43    let package_name = package_name.trim();
44
45    if package_name.is_empty() {
46        bail!("package name cannot be empty");
47    }
48
49    if package_name.chars().any(|ch| ch.is_control()) {
50        bail!("package name contains invalid control characters");
51    }
52
53    Ok(())
54}